home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / wics.zip / HIERLB.CPP < prev    next >
C/C++ Source or Header  |  1993-03-03  |  9KB  |  390 lines

  1. //==============================================================================================
  2. //
  3. //    Windows Interface Construction Set
  4. //    Version 1.00
  5. //
  6. //    HIERLB.CPP - Hierarchial List Box Class Source File
  7. //    Copyright ⌐ 1993 by Microdyne Development Technologies.
  8. //    All rights reserved.
  9. //==============================================================================================
  10.  
  11. #include <hierlb.h>
  12.  
  13.  
  14. THierarchialListBox::THierarchialListBox (PTWindowsObject AParent, UINT AnID)
  15.     : TListBox (AParent, AnID)
  16. {
  17. }
  18.  
  19. THierarchialListBox::~THierarchialListBox()
  20. {
  21. }
  22.  
  23. int THierarchialListBox::AddString (LPSTR AString, HANDLE hSubTree, int index)
  24. {
  25.     HIERSEARCH    hi;
  26.  
  27.     hi.hSubList = hSubTree;
  28.     hi.Index    = index;
  29.     hi.lpszText = AString;
  30.      
  31.     return (int) SendMessage (HWindow, HLB_ADDSTRING, 0, (LPARAM) &hi);
  32. }
  33.  
  34. void THierarchialListBox::OpenSubTree (HANDLE hParent, int index)
  35. {
  36.     SendMessage (HWindow, HLB_OPENSUBTREE, 0, MAKELPARAM(hParent, index));
  37. }
  38.  
  39. void THierarchialListBox::CloseSubTree (HANDLE hParent, int index)
  40. {
  41.     SendMessage (HWindow, HLB_CLOSESUBTREE, 0, MAKELPARAM(hParent, index));
  42. }
  43.  
  44. int THierarchialListBox::AddString (LPSTR AString)
  45. {
  46.     return AddString(AString, NULL, 0);
  47. }
  48.  
  49. int THierarchialListBox::InsertString(LPSTR AString, int Index)
  50. {
  51.     return InsertString (AString, NULL, Index);
  52. }
  53.  
  54. int THierarchialListBox::InsertString(LPSTR AString, HANDLE hSubTree, int Index)
  55. {
  56.     HIERSEARCH    hi;
  57.  
  58.     hi.hSubList = hSubTree;
  59.     hi.Index    = Index;
  60.     hi.lpszText = AString;
  61.      
  62.     return (int) SendMessage( HWindow, HLB_INSERTSTRING, 0, (LPARAM) &hi);
  63. }
  64.  
  65. int THierarchialListBox::DeleteString (int index)
  66. {
  67.     return DeleteString(NULL, index);
  68. }
  69.  
  70. int THierarchialListBox::DeleteString (HANDLE hSubTree, int index)
  71. {
  72.     return (int) SendMessage (HWindow, HLB_DELETESTRING, index, MAKELPARAM(hSubTree,0));
  73. }
  74.  
  75. int THierarchialListBox::FindString (LPSTR AString, int index)
  76. {
  77.     int    i;
  78.     HANDLE    hSubTree;
  79.  
  80.     i = index;
  81.     hSubTree = NULL;
  82.  
  83.     return FindString (AString, hSubTree, i, FALSE);
  84. }
  85.  
  86. int THierarchialListBox::FindString (LPSTR AString, HANDLE& hSubTree, int& index, BOOL fSubTableSearch)
  87. {
  88.     HIERSEARCH    hi;
  89.     int            iResult;
  90.  
  91.     hi.hSubList = hSubTree;
  92.     hi.Index    = index;
  93.     hi.lpszText = AString;
  94.  
  95.     iResult = (int) SendMessage (HWindow, HLB_FINDSTRING, (WPARAM) fSubTableSearch, (LPARAM) &hi);
  96.  
  97.     hSubTree = hi.hSubList;
  98.     index    = hi.Index;
  99.  
  100.     return iResult;
  101. }
  102.  
  103. int THierarchialListBox::FindExactString (LPSTR AString, int index)
  104. {
  105.     int    i;
  106.     HANDLE    hSubTree;
  107.  
  108.     i = index;
  109.     hSubTree = NULL;
  110.  
  111.     return FindExactString (AString, hSubTree, i, FALSE);
  112. }
  113.  
  114. int THierarchialListBox::FindExactString (LPSTR AString, HANDLE& hSubTree, int& index, BOOL fSubTableSearch)
  115. {
  116.     HIERSEARCH    hi;
  117.     int            iResult;
  118.  
  119.     hi.hSubList = hSubTree;
  120.     hi.Index    = index;
  121.     hi.lpszText = AString;
  122.  
  123.     iResult = (int) SendMessage (HWindow, HLB_FINDSTRINGEXACT, (WPARAM) fSubTableSearch, (LPARAM) &hi);
  124.  
  125.     hSubTree = hi.hSubList;
  126.     index    = hi.Index;
  127.  
  128.     return iResult;
  129. }
  130.  
  131. void THierarchialListBox::ClearList()
  132. {
  133.     SendMessage (HWindow, HLB_RESETCONTENT, 0, 0L);
  134. }
  135.  
  136. HANDLE THierarchialListBox::GetChildHandle (HANDLE hList, int index)
  137. {
  138.     return (HANDLE) SendMessage (HWindow, HLB_GETCHILDHANDLE, index, MAKELPARAM(hList,0));
  139. }
  140.  
  141. int THierarchialListBox::GetCount()
  142. {
  143.     return (int) SendMessage (HWindow, HLB_GETCOUNT, 0, 0L);
  144. }
  145.  
  146. int THierarchialListBox::GetCount(HANDLE hList)
  147. {
  148.     return (int) SendMessage (HWindow, HLB_GETCOUNT, 0, MAKELPARAM(hList,0));
  149. }
  150.  
  151. int THierarchialListBox::GetSelString(LPSTR AString, int MaxChars)
  152. {
  153.     LRESULT        lResult;
  154.     HIERSEARCH    hi;
  155.     int            iTextLength;
  156.  
  157.     if ((lResult = SendMessage (HWindow, HLB_GETCURSEL, 0, (LPARAM) &hi.hSubList)) != LB_ERR )
  158.     {
  159.         hi.Index = (int) lResult;
  160.         iTextLength = (int) SendMessage (HWindow, HLB_GETTEXTLEN, 0, (LPARAM)&hi) + 1;
  161.  
  162.         if ( iTextLength >= MaxChars )
  163.         {
  164.             hi.lpszText = AString;
  165.             return (int) SendMessage (HWindow, HLB_GETTEXT, 0, (LPARAM) &hi);
  166.         }
  167.         else
  168.         {
  169.             hi.lpszText = new char[iTextLength];
  170.             lResult = SendMessage (HWindow, HLB_GETTEXT, 0, (LPARAM) &hi);
  171.             _fmemmove (AString, hi.lpszText, MaxChars-1);
  172.             *(AString+MaxChars-1) = 0x00;
  173.             delete hi.lpszText;
  174.  
  175.             return (int) lResult; 
  176.         }
  177.     }
  178.  
  179.     return 0;
  180. }
  181.  
  182. int THierarchialListBox::SetSelString(LPSTR Prefix, int SearchIndex)
  183. {
  184.     HANDLE    hList;
  185.     int        index ;
  186.  
  187.     hList = NULL;
  188.     index = SearchIndex;
  189.  
  190.     return SetSelString(Prefix, hList, index, FALSE);
  191. }
  192.  
  193. int THierarchialListBox::SetSelString(LPSTR AString, HANDLE& hSubTree, int& index, BOOL fSubTableSearch)
  194. {
  195.     HIERSEARCH    hi;
  196.     int            iReturn;
  197.  
  198.     if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
  199.     {
  200.         hi.hSubList = hSubTree;
  201.         hi.Index = index;
  202.         hi.lpszText = AString;
  203.  
  204.         iReturn = (int)SendMessage(HWindow, HLB_SELECTSTRING, fSubTableSearch, (long) &hi);
  205.  
  206.         hSubTree = hi.hSubList;
  207.         index    = hi.Index;
  208.     }
  209.     else
  210.         return -1;
  211.  
  212.     return iReturn;
  213. }
  214.  
  215. int THierarchialListBox::GetSelIndex()
  216. {
  217.     return (int) SendMessage (HWindow, HLB_GETCURSEL, 0, 0L);
  218. }
  219.  
  220. int THierarchialListBox::GetSelIndex(HANDLE& hSubList)
  221. {
  222.     HANDLE    hList;
  223.     int        i;
  224.  
  225.     i = (int) SendMessage (HWindow, HLB_GETCURSEL, 0, (LPARAM) &hList);
  226.  
  227.     hSubList = hList;
  228.     return i;
  229. }
  230.  
  231. int THierarchialListBox::SetSelIndex(int Index)
  232. {
  233.     return (int) SendMessage (HWindow, HLB_SETCURSEL, Index, 0L);
  234. }
  235.  
  236. int THierarchialListBox::SetSelIndex(HANDLE hSubList, int index)
  237. {
  238.     return (int) SendMessage (HWindow, HLB_SETCURSEL, index, MAKELPARAM(hSubList,0));
  239. }
  240.  
  241. int THierarchialListBox::GetSelCount()
  242. {
  243.     if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
  244.         return GetSelIndex() < 0 ? 0 : 1;
  245.     else  
  246.         return (int)SendMessage(HWindow, HLB_GETSELCOUNT, 0, 0);
  247. }
  248.  
  249. int THierarchialListBox::GetStringLen(int Index)
  250. {
  251.     return GetStringLen(NULL, Index);
  252. }
  253.  
  254. int THierarchialListBox::GetStringLen(HANDLE hSubTree, int Index)
  255. {
  256.     HIERSEARCH    hi;
  257.  
  258.     hi.hSubList = hSubTree;
  259.     hi.Index    = Index;
  260.  
  261.     return (int) SendMessage (HWindow, HLB_GETTEXTLEN, 0, (LPARAM) &hi);
  262. }
  263.  
  264. int THierarchialListBox::GetString(LPSTR AString, int Index)
  265. {
  266.     return GetString(AString, NULL, Index);
  267. }
  268.  
  269. int THierarchialListBox::GetString(LPSTR AString, HANDLE hSubTree, int index)
  270. {
  271.     HIERSEARCH    hi;
  272.  
  273.     hi.hSubList = hSubTree;
  274.     hi.Index    = index;
  275.     hi.lpszText = AString;
  276.  
  277.     return (int) SendMessage (HWindow, HLB_GETTEXT, 0, (LPARAM) &hi);
  278. }
  279.  
  280. int THierarchialListBox::GetSelStrings(LPSTR *Strings, int MaxCount, int MaxChars)
  281. {
  282.     int        I, TmpStringLen;
  283.     long *    Selections;
  284.     Pchar    TmpString;
  285.  
  286.     if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
  287.         return -1;
  288.  
  289.     I = GetSelCount();
  290.  
  291.     if ( I < MaxCount )
  292.         MaxCount = I;
  293.  
  294.     if ( MaxCount > 0 )
  295.     {
  296.         Selections = new long[MaxCount];
  297.         SendMessage(HWindow, HLB_GETSELITEMS, MaxCount, (long)(Selections));
  298.  
  299.         for (int SelIndex = 0; SelIndex < MaxCount; SelIndex++)
  300.         {
  301.             TmpStringLen = GetStringLen(LOWORD(Selections[SelIndex]), HIWORD(Selections[SelIndex]));
  302.  
  303.               if ( MaxChars >= TmpStringLen )
  304.                 GetString(Strings[SelIndex], LOWORD(Selections[SelIndex]), HIWORD(Selections[SelIndex]));
  305.             else
  306.             {
  307.                 TmpString = new char [TmpStringLen+1];
  308.  
  309.                 if ( TmpString )
  310.                 {
  311.                     GetString(TmpString, LOWORD(Selections[SelIndex]), HIWORD(Selections[SelIndex]));
  312.                     _fstrncpy(Strings[SelIndex], TmpString, MaxChars);
  313.                     delete TmpString;
  314.                 }
  315.             }
  316.         }
  317.  
  318.         delete Selections;
  319.     }
  320.  
  321.     return MaxCount;
  322. }
  323.  
  324. int THierarchialListBox::SetSelStrings(LPSTR *Prefixes, int NumSelections, BOOL ShouldSet)
  325. {
  326.     HANDLE        hList;
  327.     int         SelIndex, Successes = 0;
  328.  
  329.     if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
  330.         return -1;
  331.  
  332.     if ( NumSelections > -1 )
  333.     {
  334.         for ( int I = 0; I < NumSelections; I++ )
  335.         {
  336.             if (FindString (Prefixes[I], hList, SelIndex, TRUE) == 0 )
  337.                 if ( (int) SendMessage(HWindow, HLB_SETSEL, ShouldSet, MAKELPARAM(SelIndex,hList)) > -1 )
  338.                     Successes++;
  339.         }
  340.     }
  341.     else
  342.         return (int)SendMessage(HWindow, HLB_SETSEL, ShouldSet, MAKELPARAM(-1,0));
  343.  
  344.     return Successes;
  345. }
  346.  
  347. int THierarchialListBox::GetSelIndexes(long far * Indexes, int MaxCount)
  348. {
  349.     if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
  350.         return -1;
  351.  
  352.     return (int)SendMessage(HWindow, HLB_GETSELITEMS, MaxCount, (long)(Indexes));
  353. }
  354.  
  355. int THierarchialListBox::SetSelIndexes(long far * Indexes, int NumSelections, BOOL ShouldSet)
  356. {
  357.     HANDLE        hList;
  358.     int            index;
  359.     int         Successes = 0;
  360.  
  361.     if ( (GetWindowLong(HWindow, GWL_STYLE) & HLBS_MULTIPLESEL) == 0 )
  362.         return -1;
  363.  
  364.     if ( NumSelections > -1 )
  365.     {
  366.         for ( int I = 0; I < NumSelections; I++ )
  367.         {
  368.             hList = LOWORD(Indexes[I]);
  369.             index = HIWORD(Indexes[I]);
  370.  
  371.             if ( (int)SendMessage(HWindow, HLB_SETSEL, ShouldSet, MAKELPARAM(hList, index)) > -1 )
  372.                 Successes++;
  373.         }
  374.     }
  375.     else
  376.         return (int)SendMessage(HWindow, HLB_SETSEL, ShouldSet, MAKELPARAM(0,-1));
  377.  
  378.     return Successes;
  379. }
  380.  
  381. //    Transfer is not supported in this version of WICS. This function is placed here as a
  382. //    place holder to override the Transfer of TListBox. Transfer will be supported in a
  383. //    future release of this product.
  384.  
  385. WORD THierarchialListBox::Transfer(Pvoid , WORD )
  386. {
  387.     return 0;
  388. }
  389.  
  390.